// 封装axios
import axios from "axios";
import {CONFIG} from "../config/index.js"
import router from "../router/index.js";
import { ElMessage } from 'element-plus'

// 添加请求拦截器
axios.interceptors.request.use(function (config) {
    // 发送之前做什么
    // console.log("请求拦截器:", config)
    // 解决缓存
    
    if ( config.method == "get" ) {
      let Timestamp = (new Date().getTime())
      // 判断有没有params配置
      if (config.params) {
        // 有params配置直接新增值
        config.params.timestamp = Timestamp
      } else {
        // 没有就实例化
        config.params = {
          timestamp: Timestamp
        }
      }
    }
    // 取出token值
    let TokenValue = ""
    try {
        TokenValue = window.localStorage.getItem(CONFIG.TOKEN_NAME)
    } catch (error) {
        TokenValue = ""
    }
    if (TokenValue == "" || TokenValue == null ) {
        config.headers[CONFIG.TOKEN_NAME] = ""
       
    }else{
        config.headers[CONFIG.TOKEN_NAME] = TokenValue
    }
    // console.log("token",TokenValue)
    return config;
  },function (error) {
    // 对请求错误做什么
    return Promise.reject(error);
  })


// 添加响应拦截器
axios.interceptors.response.use(function (response) {
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么
    // 判断相应状态码是否正常
    console.log("response:", response)
    if (response.data.status === 200) {
        return Promise.resolve(response)
    } else if (response.data.status === 401) {
        // 说明我们的token已经失效了
        // 删除token
        window.localStorage.removeItem(CONFIG.TOKEN_NAME)
        // 当前页面不在login时候，token失效,跳转到登录页
        router.currentRoute.path != "/login" && router.replace("/login")
        ElMessage({
            message: response.data.message,
            type: 'warning',
        })
    }

    return response;
  }, function (error) {
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    ElMessage({
        message: "请求错误:"+error.message,
        type: 'error',
    })
    return Promise.reject(error);
  });


const request = (url = "", methed = "get", timeout = 5000, data={}) => {
    console.log("使用axios封装调用接口")
    return new Promise((resolve, reject)=>{
        console.log("使用axios请求接口")
        const methedLower = methed.toLowerCase()
        if ( methedLower === "get" ) {
            axios({
                method: methedLower,
                params: data,
                timeout: timeout,
                url: url,
            }).then((response) => {
                // 能正常拿到数据
                resolve(response)
            }).catch((error) => {
                reject(error)
            })
        }else if (methedLower === "post") {
            axios({
                method: methedLower,
                data: data,
                timeout: timeout,
                url: url,
            }).then((response) => {
                resolve(response)
            }).catch((error) => {
                reject(error)
            })
        }

    })
}

export default request